package org.coopac.controller.admision;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import org.coopac.model.CoopacConsultaSocioPotencial;
import org.coopac.model.CoopacDireccionPersona;
import org.coopac.model.CoopacDocumentoPersona;
import org.coopac.model.CoopacPersona;
import org.coopac.model.CoopacTelefonoPersona;
import org.coopac.model.CoopacTipoCredito;
import org.coopac.model.CoopacTipoCuenta;
import org.coopac.service.IConsultaSocioPotencialService;
import org.coopac.service.IDetalleConsultaSocioPotencialService;
import org.coopac.service.IDireccionPersonaService;
import org.coopac.service.IDocumentoPersonaService;
import org.coopac.service.IPersonaService;
import org.coopac.service.ITelefonoPersonaService;
import org.coopac.service.ITipoCreditoService;
import org.coopac.service.ITipoCuentaService;

import com.gwtext.client.widgets.grid.ColumnModel;

@ManagedBean(name = "reporteAdmision")
@SessionScoped
public class ReporteAdmisionController implements Serializable{

	private static final long serialVersionUID = 1L;
	
	@ManagedProperty(value = "#{consultaSocioPotencialService}")
	IConsultaSocioPotencialService consultaSocioPotencialService;

	@ManagedProperty(value = "#{detalleConsultaSocioPotencialService}")
	IDetalleConsultaSocioPotencialService detalleConsultaSocioPotencialService;

	@ManagedProperty(value = "#{personaService}")
	IPersonaService personaService;

	@ManagedProperty(value = "#{documentoPersonaService}")
	IDocumentoPersonaService documentoService;
	
	@ManagedProperty(value = "#{telefonoPersonaService}")
	ITelefonoPersonaService telefonoService;

	@ManagedProperty(value = "#{tipoCuentaService}")
	ITipoCuentaService tipoCuentaService;

	@ManagedProperty(value = "#{tipoCreditoService}")
	ITipoCreditoService tipoCreditoService;
	
	@ManagedProperty(value = "#{direccionPersonaService}")
	IDireccionPersonaService 	direccionService;
	
	public ReporteAdmisionController() {
		personaSeleccionada = new CoopacPersona();

	}
	private List<CoopacPersona> personaList;
	private CoopacPersona personaSeleccionada;
	
	private PersonaCompleta personaCompleta;
	private List<PersonaCompleta> personaCompletaList;
	private CoopacTipoCuenta[] selectedCuentas;
	
	private List<CoopacTipoCredito> tipoCreditoList;
	private CreditoDataModel tipoCreditoDataModel;
	private CoopacTipoCredito[] selectedCreditos;
	
	private List<CoopacTipoCuenta> tipoCuentaList;
	private CuentaDataModel tipoCuentaDataModel;
	
	private List<ColumnModel> columns = new ArrayList<ColumnModel>();

	public void updateColumnCuenta(){
		UIComponent table = FacesContext.getCurrentInstance().getViewRoot().findComponent(":form:tablaConsultaPersona");  
        createDynamicColumnsCuenta();
	}
	
	private List<ColumnModel> simpleColumns;
	 public void createDynamicColumnsCuenta() {  
	        columns.clear();        
	          
	        
	        simpleColumns = new ArrayList<ColumnModel>();
	        simpleColumns.add(new ColumnModel("Model", "model"));
	        simpleColumns.add(new ColumnModel("Manufacturer", "manufacturer"));
	 } 
	 
	 static public class ColumnModel implements Serializable {

	        /**
		 * 
		 */
		private static final long serialVersionUID = 1L;
			private String header;
	        private String property;

	        public ColumnModel(String header, String property) {
	            this.header = header;
	            this.property = property;
	        }

	        public String getHeader() {
	            return header;
	        }

	        public String getProperty() {
	            return property;
	        }
	    }
	
	public CoopacTipoCuenta[] getSelectedCuentas() {
		return selectedCuentas;
	}

	public void setSelectedCuentas(CoopacTipoCuenta[] selectedCuentas) {
		this.selectedCuentas = selectedCuentas;
	}

	public CreditoDataModel getTipoCreditoDataModel() {
		tipoCreditoDataModel = new CreditoDataModel(getTipoCreditoList());
		return tipoCreditoDataModel;
	}

	public void setTipoCreditoDataModel(CreditoDataModel tipoCreditoDataModel) {
		this.tipoCreditoDataModel = tipoCreditoDataModel;
	}

	public CoopacTipoCredito[] getSelectedCreditos() {
		return selectedCreditos;
	}

	public void setSelectedCreditos(CoopacTipoCredito[] selectedCreditos) {
		this.selectedCreditos = selectedCreditos;
	}

	public CuentaDataModel getTipoCuentaDataModel() {
		tipoCuentaDataModel = new CuentaDataModel(getTipoCuentaList());
		return tipoCuentaDataModel;
	}

	public void setTipoCuentaDataModel(CuentaDataModel tipoCuentaDataModel) {
		this.tipoCuentaDataModel = tipoCuentaDataModel;
	}

	public List<CoopacTipoCredito> getTipoCreditoList() {
		return tipoCreditoService.listar();
	}

	public void setTipoCreditoList(List<CoopacTipoCredito> tipoCreditoList) {
		this.tipoCreditoList = tipoCreditoList;
	}

	public List<CoopacTipoCuenta> getTipoCuentaList() {
		return tipoCuentaService.listar();
	}

	public void setTipoCuentaList(List<CoopacTipoCuenta> tipoCuentaList) {
		this.tipoCuentaList = tipoCuentaList;
	}
	
	
	//////////

	public PersonaCompleta getPersonaCompleta() {
		return personaCompleta;
	}

	public void setPersonaCompleta(PersonaCompleta personaCompleta) {
		this.personaCompleta = personaCompleta;
	}
	
	
	public List<PersonaCompleta> getPersonaCompletaList() {
		personaCompletaList = new ArrayList<PersonaCompleta>();
		List<CoopacDocumentoPersona> coopacDocumentoPersonasList = documentoService.listar();
		List<CoopacTelefonoPersona> coopacTelefonoPersonasList = telefonoService.listar();
		List<CoopacDireccionPersona> coopacDireccionPersonasList = direccionService.listar();
		
		for(CoopacPersona coopacPersona:getPersonaList()){
			PersonaCompleta personaCompleta = new PersonaCompleta();
			List<CoopacDocumentoPersona> coopacDocumentoPersonas = new ArrayList<CoopacDocumentoPersona>();
			List<CoopacTelefonoPersona> coopacTelefonoPersonas = new ArrayList<CoopacTelefonoPersona>();
			List<CoopacDireccionPersona> coopacDireccionPersonas = new ArrayList<CoopacDireccionPersona>();
			
			for(CoopacDocumentoPersona coopacDocumentoPersona: coopacDocumentoPersonasList){
				if(coopacDocumentoPersona.getCoopacPersona().getIdPersona().equals(coopacPersona.getIdPersona())){
					coopacDocumentoPersonas.add(coopacDocumentoPersona);
				}
			}
			for(CoopacTelefonoPersona coopacTelefonoPersona: coopacTelefonoPersonasList){
				if(coopacTelefonoPersona.getCoopacPersona().getIdPersona().equals(coopacPersona.getIdPersona())){
					coopacTelefonoPersonas.add(coopacTelefonoPersona);
				}
			}
			for(CoopacDireccionPersona coopacDireccionPersona: coopacDireccionPersonasList){
				if(coopacDireccionPersona.getCoopacPersona().getIdPersona().equals(coopacPersona.getIdPersona())){
					coopacDireccionPersona.setDireccionResumen(personaCompleta.generarDomicilioCompletoPersona(coopacDireccionPersona));
					coopacDireccionPersonas.add(coopacDireccionPersona);
				}
			}
			personaCompleta.setPersona(coopacPersona);
			personaCompleta.setDocumentoXPersona(coopacDocumentoPersonas);
			personaCompleta.setTelefonoXPersona(coopacTelefonoPersonas);
			personaCompleta.setDireccionXPersona(coopacDireccionPersonas);
			personaCompletaList.add(personaCompleta);
		}
		
		return personaCompletaList;
	}
	public void setPersonaCompletaList(List<PersonaCompleta> personaCompletaList) {
		this.personaCompletaList = personaCompletaList;
	}


	//personaList
	public List<CoopacPersona> getPersonaList() {
		List<CoopacPersona> coopacPersonas = personaService.listar();
		List<CoopacConsultaSocioPotencial> consultaSocioPotencials = consultaSocioPotencialService.listar();
		List<CoopacPersona> coopacPersonaList = new ArrayList<CoopacPersona>();
		
		for(CoopacPersona coopacPersona:coopacPersonas){
			for(CoopacConsultaSocioPotencial consultaSocioPotencial:consultaSocioPotencials){
				if(coopacPersona.getIdPersona().equals(consultaSocioPotencial.getCoopacPersona().getIdPersona())){
					coopacPersonaList.add(coopacPersona);
				}
			}
		}
		return coopacPersonaList;
	}

	public void setPersonaList(List<CoopacPersona> personaList) {
		this.personaList = personaList;
	}
	
	
	public IConsultaSocioPotencialService getConsultaSocioPotencialService() {
		return consultaSocioPotencialService;
	}

	public void setConsultaSocioPotencialService(
			IConsultaSocioPotencialService consultaSocioPotencialService) {
		this.consultaSocioPotencialService = consultaSocioPotencialService;
	}

	public IDetalleConsultaSocioPotencialService getDetalleConsultaSocioPotencialService() {
		return detalleConsultaSocioPotencialService;
	}

	public void setDetalleConsultaSocioPotencialService(
			IDetalleConsultaSocioPotencialService detalleConsultaSocioPotencialService) {
		this.detalleConsultaSocioPotencialService = detalleConsultaSocioPotencialService;
	}

	public IPersonaService getPersonaService() {
		return personaService;
	}

	public void setPersonaService(IPersonaService personaService) {
		this.personaService = personaService;
	}

	public IDocumentoPersonaService getDocumentoService() {
		return documentoService;
	}

	public void setDocumentoService(IDocumentoPersonaService documentoService) {
		this.documentoService = documentoService;
	}

	public ITelefonoPersonaService getTelefonoService() {
		return telefonoService;
	}

	public void setTelefonoService(ITelefonoPersonaService telefonoService) {
		this.telefonoService = telefonoService;
	}

	public ITipoCuentaService getTipoCuentaService() {
		return tipoCuentaService;
	}

	public void setTipoCuentaService(ITipoCuentaService tipoCuentaService) {
		this.tipoCuentaService = tipoCuentaService;
	}

	public ITipoCreditoService getTipoCreditoService() {
		return tipoCreditoService;
	}

	public void setTipoCreditoService(ITipoCreditoService tipoCreditoService) {
		this.tipoCreditoService = tipoCreditoService;
	}
	

	public CoopacPersona getPersonaSeleccionada() {
		return personaSeleccionada;
	}


	public void setPersonaSeleccionada(CoopacPersona personaSeleccionada) {
		this.personaSeleccionada = personaSeleccionada;
	}


	public IDireccionPersonaService getDireccionService() {
		return direccionService;
	}


	public void setDireccionService(IDireccionPersonaService direccionService) {
		this.direccionService = direccionService;
	}


	public static long getSerialversionuid() {
		return serialVersionUID;
	}
	
	
	
	//CoopacConsultaSocioPotencial coopacConsultaSocioPotencial = new CoopacConsultaSocioPotencial();
	//CoopacDetalleConsultaSocioPotencial coopacDetalleConsultaSocioPotencial = new CoopacDetalleConsultaSocioPotencial();
	//CoopacTelefonoPersona telefonoPersonaN;
	//CoopacPersona personaN;
	//CoopacDocumentoPersona documentoPersonaN;
}
